package com.xbongbong.saas.model;

import com.xbongbong.paas.domain.entity.OneFormNumEntity;
import com.xbongbong.paas.domain.entity.PaasFormDataEntity;
import com.xbongbong.paas.domain.entity.ext.PaasFormDataEntityExt;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.pro.domain.entity.UpdateDataEntity;
import com.xbongbong.pro.form.pojo.dto.EsDataDTO;
import com.xbongbong.pro.formdata.pojo.PaasFormDataNoDataPojo;
import org.elasticsearch.action.support.WriteRequest;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;

/**
 * PaaS表单数据类
 *
 * @author wufeng
 * @time 2018-8-8 9:47
 */
public interface PaasFormDataModel extends IModel<PaasFormDataEntity> {

    /**
     * 业务规则专用之插入
     * @param entity
     * @param refreshPolicy
     * @return
     * @throws XbbException
     */

    Integer insert(PaasFormDataEntity entity , WriteRequest.RefreshPolicy refreshPolicy) throws XbbException;

    /**
     * 查询列表
     * @author wufeng
     * @date 2018/8/13 16:07
     * @param entity 参数集合
     * @return java.util.List<ApplicationListVO>
     */
    @Override
    List<PaasFormDataEntityExt> findEntitys(Map<String, Object> entity);

    /**
     * 获取原生的列表数据
     * @param map
     * @return
     */
    List<PaasFormDataEntityExt> findEntityOriginal(Map<String, Object> map);

    /**
     * 批量更新
     * @author 吴峰
     * @date 2019/2/14 14:31
     * @param paasFormDataList 入库的数据
     */
    void insertBatch(List<PaasFormDataEntity> paasFormDataList) throws XbbException;

    /**
     * 查询实体
     * @param key id
     * @param corpid 公司id
     * @return PaasFormDataEntityExt
     */
    PaasFormDataEntityExt getByKey(Long key, String corpid);
    /**
     *  查询列表数量
     * @author wufeng
     * @date 2018/8/13 16:07
     * @param entity 参数集合
     * @return Integer
     */
    @Override
    Integer getEntitysCount(Map<String, Object> entity);

    /**
     * 删除实体
     * @author wufeng
     * @date 2018/8/6 17:18
     * @param key 主键
     * @param corpid 公司id
     * @return java.lang.Integer  mybatis操作结果，1：成功
     * @throws ExecutionException ExecutionException
     * @throws InterruptedException InterruptedException
     */
    Integer delete(Integer key, String corpid) throws ExecutionException, InterruptedException, IOException, XbbException;

    /**
     * 批量删除
     * @param list 更新的数据
     * @param corpid 公司id
     * @param del 删除标识
     * @return Integer
     * @throws XbbException XbbException
     */
    Integer deleteBatch(List<Long> list, String corpid, Integer del) throws XbbException;

    /**
     * 批量更新-无子表单
     * @param list 数据列表
     * @param corpid 公司id
     * @return Integer
     * @throws XbbException XbbException
     */
    Integer updateBatch(List<UpdateDataEntity> list, String corpid) throws XbbException;
    /**
     * 批量更新-业务规则
     * @param list 数据列表
     * @param corpid 公司id
     * @return Integer
     * @throws XbbException XbbException
     */
    Integer updateBatch(List<UpdateDataEntity> list, String corpid, WriteRequest.RefreshPolicy refreshPolicy) throws XbbException;


    /**
     * 快速编辑
     * @param param
     * @param corpid
     * @param key
     * @return
     * @throws XbbException
     */
    Integer fastUpdate(Map<String, Object> param, Long key, String corpid) throws XbbException;

    /**
     * 根据数据id检索出数据列表
     * @param formDataId
     * @param corpid
     * @param del
     * @return
     */
    List<PaasFormDataEntity> findEntitysByIds(List<Long> formDataId, String corpid, Integer del);

    /**
     * 数据还原
     * @param formDataIds 表单数据id列表
     * @param corpid 公司id
     * @param del 删除标记
     * @return
     * @throws XbbException
     */
    Integer restoreBatch(List<Long> formDataIds, String corpid, Integer del) throws XbbException;

    /**
     * 彻底删除
     * @param formDataIds 表单数据id列表
     * @param corpid 公司id
     * @param del 删除标记
     * @return
     * @throws XbbException
     */
    Integer thoroughDeleteBatch(List<Long> formDataIds, String corpid, Integer del) throws XbbException;

    /**
     * 批量更新团队
     *
     * @param dataIdList
     * @param corpid
     * @param userId
     * @throws
     * @author long.rao
     * @date 2020-04-10 10:53
     */
    Integer batchUpdateOwner(List<Long> dataIdList, String corpid, String userId, WriteRequest.RefreshPolicy refreshPolicy) throws XbbException;

    /**
     * 获取单表最大数量
     * @param corpid
     * @return
     * 创建时间 2019/3/26 7:11 PM
     * 修改时间 2019/3/26 7:11 PM
     * @author chy
     * @since v1.0
     * @version v1.0
     */
    OneFormNumEntity getOneFormMaxNum(String corpid);


    String getFormEntityMainAttr(Integer businessType);

    /**
     * 获取此次最大id,主要用于刷脚本使用
     *
     * @param param
     * @return
     */
    Long getMaxId(Map<String, Object> param);

    /**
     * 更新paas表单更新时间
     *
     * @param dataId
     * @param corpid
     */
    void updateTime(Long dataId, String corpid) throws XbbException;

    /**
     * 获取paas表单数据，只查询一部分自己需要的数据
     *
     * @param param
     * @return
     */
    List<PaasFormDataNoDataPojo> getPaasFormDataNoDataPojo(Map<String, Object> param) throws XbbException;
}
